export interface RootArtistInfo {
  code: number
  message: string
  data: ArtistInfo
}

export interface ArtistInfo {
  videoCount: number
  identify: Identify
  artist: Artist
  blacklist: boolean
  preferShow: number
  showPriMsg: boolean
  secondaryExpertIdentiy: SecondaryExpertIdentiy[]
}

export interface SecondaryExpertIdentiy {
  expertIdentiyId: number
  expertIdentiyName: string
  expertIdentiyCount: number
}

export interface Artist {
  id: number
  cover: string
  avatar: string
  name: string
  transNames: any[]
  alias: string[]
  identities: any[]
  identifyTag?: any
  briefDesc: string
  rank: Rank
  albumSize: number
  musicSize: number
  mvSize: number
}

export interface Rank {
  rank: number
  type: number
}

export interface Identify {
  imageUrl?: any
  imageDesc: string
  actionUrl: string
}

// ----------------------------
export interface RootSong {
  songs: Song[]
  more: boolean
  total: number
  code: number
}

export interface Song {
  rtUrls: any[]
  ar: Ar[]
  al: Al
  st: number
  noCopyrightRcmd?: any
  songJumpInfo?: any
  rtype: number
  rurl?: any
  pst: number
  alia: string[]
  pop: number
  rt?: string
  mst: number
  cp: number
  crbt?: any
  cf: string
  dt: number
  h: H
  sq: H
  hr?: H
  l: H
  rtUrl?: any
  ftype: number
  djId: number
  no: number
  fee: number
  mv: number
  t: number
  v: number
  cd: string
  a?: any
  m?: H
  name: string
  id: number
  privilege: Privilege
  eq?: string
}

export interface Privilege {
  id: number
  fee: number
  payed: number
  st: number
  pl: number
  dl: number
  sp: number
  cp: number
  subp: number
  cs: boolean
  maxbr: number
  fl: number
  toast: boolean
  flag: number
  preSell: boolean
  playMaxbr: number
  downloadMaxbr: number
  maxBrLevel: string
  playMaxBrLevel: string
  downloadMaxBrLevel: string
  plLevel: string
  dlLevel: string
  flLevel: string
  rscl?: any
  freeTrialPrivilege: FreeTrialPrivilege
  chargeInfoList: ChargeInfoList[]
}

export interface ChargeInfoList {
  rate: number
  chargeUrl?: any
  chargeMessage?: any
  chargeType: number
}

export interface FreeTrialPrivilege {
  resConsumable: boolean
  userConsumable: boolean
  listenType?: any
}

export interface H {
  br: number
  fid: number
  size: number
  vd: number
  sr: number
}

export interface Al {
  id: number
  name: string
  pic_str: string
  pic: Pic | number
  alia?: string[]
  tns?: string[]
}

export interface Pic {
  s: number
  e: number
  c: number[]
}

export interface Ar {
  id: number
  name: string
}

export interface RootArtistDesc {
  introduction: Introduction[]
  briefDesc: string
  count: number
  topicData: TopicDatum[]
  code: number
}

export interface TopicDatum {
  topic: Topic
  creator: Creator
  shareCount: number
  commentCount: number
  likedCount: number
  liked: boolean
  rewardCount: number
  rewardMoney: number
  relatedResource?: any
  rectanglePicUrl: string
  coverUrl: string
  categoryId: number
  categoryName: string
  mainTitle: string
  commentThreadId: string
  reward: boolean
  shareContent: string
  wxTitle: string
  addTime: number
  seriesId: number
  showComment: boolean
  showRelated: boolean
  memo?: any
  summary: string
  recmdTitle: string
  recmdContent: string
  readCount: number
  url: string
  title: string
  tags: string[]
  id: number
  number: number
}

export interface Creator {
  userId: number
  userType: number
  nickname: string
  avatarImgId: Id
  avatarUrl: string
  backgroundImgId: Id
  backgroundUrl: string
  signature: string
  createTime: number
  userName: string
  accountType: number
  shortUserName: string
  birthday: number
  authority: number
  gender: number
  accountStatus: number
  province: number
  city: number
  authStatus: number
  description?: any
  detailDescription?: any
  defaultAvatar: boolean
  expertTags?: string[]
  experts?: Expert
  djStatus: number
  locationStatus: number
  vipType: number
  followed: boolean
  mutual: boolean
  authenticated: boolean
  lastLoginTime: number
  lastLoginIP: string
  remarkName?: any
  viptypeVersion: number
  authenticationTypes: number
  avatarDetail?: any
  anchor: boolean
}

export interface Expert {
  '1': string
}

export interface Topic {
  id: number
  addTime: number
  mainTitle: string
  title: string
  content: Content[]
  userId: number
  cover: Id
  headPic: number
  shareContent: string
  wxTitle: string
  showComment: boolean
  status: number
  seriesId: number
  pubTime: number
  readCount: number
  tags: string[]
  pubImmidiatly: boolean
  auditor: string
  auditTime: number
  auditStatus: number
  startText: string
  delReason: string
  showRelated: boolean
  fromBackend: boolean
  rectanglePic: Id
  updateTime: number
  reward: boolean
  summary: string
  memo?: any
  adInfo: string
  categoryId: number
  hotScore: number
  recomdTitle: string
  recomdContent: string
  number: number
}

export interface Content {
  type: number
  id: Id | number | number
  content?: string
}

export interface Id {
  s: number
  e: number
  c: number[]
}

export interface Introduction {
  ti: string
  txt: string
}

// --------------
export interface RootAlbum {
  artist: Artist1
  hotAlbums: HotAlbum[]
  more: boolean
  code: number
}

export interface HotAlbum {
  songs: any[]
  paid: boolean
  onSale: boolean
  mark: number
  awardTags?: any
  companyId: number
  blurPicUrl: string
  pic: Img1v1Id
  picId: Img1v1Id
  artist: Artist2
  artists: Artist3[]
  copyrightId: number
  briefDesc: string
  publishTime: number
  company: string
  picUrl: string
  commentThreadId: string
  status: number
  subType: string
  alias: string[]
  description: string
  tags: string
  name: string
  id: number
  type: string
  size: number
  picId_str: string
  isSub: boolean
}

export interface Artist3 {
  img1v1Id: Img1v1Id
  topicPerson: number
  picId: number
  trans: string
  briefDesc: string
  musicSize: number
  albumSize: number
  picUrl: string
  img1v1Url: string
  followed: boolean
  alias: any[]
  name: string
  id: number
  img1v1Id_str: string
}

export interface Artist2 {
  img1v1Id: Img1v1Id
  topicPerson: number
  picId: Img1v1Id
  trans: string
  briefDesc: string
  musicSize: number
  albumSize: number
  picUrl: string
  img1v1Url: string
  followed: boolean
  alias: string[]
  name: string
  id: number
  picId_str: string
  img1v1Id_str: string
  transNames?: string[]
}

export interface Artist1 {
  img1v1Id: Img1v1Id
  topicPerson: number
  picId: Img1v1Id
  trans: string
  briefDesc: string
  musicSize: number
  albumSize: number
  picUrl: string
  img1v1Url: string
  followed: boolean
  alias: string[]
  name: string
  id: number
  picId_str: string
  img1v1Id_str: string
}

export interface Img1v1Id {
  s: number
  e: number
  c: number[]
}

// -------------------
export interface RootMv {
  mvs: Mv[]
  time: number
  hasMore: boolean
  code: number
}

export interface Mv {
  id: number
  name: string
  status: number
  imgurl: string
  artistName: string
  imgurl16v9: string
  artist: ArtistMv
  duration: number
  playCount: number
  publishTime: string
  subed: boolean
}

export interface ArtistMv {
  img1v1Id: Img1v1Id
  topicPerson: number
  alias: any[]
  picId: number
  briefDesc: string
  picUrl: string
  img1v1Url: string
  albumSize: number
  trans: string
  musicSize: number
  name: string
  id: number
  img1v1Id_str: string
}

// ------------------------------

export interface RootAlbumInfo {
  resourceState: boolean
  songs: AlbumSong[]
  code: number
  album: Album
}

export interface Album {
  songs: any[]
  paid: boolean
  onSale: boolean
  mark: number
  awardTags?: any
  companyId: number
  blurPicUrl: string
  pic: Pic
  artists: AlbumArtist[]
  copyrightId: number
  picId: Pic
  artist: AlbumArtist2
  briefDesc: string
  publishTime: number
  company: string
  picUrl: string
  commentThreadId: string
  status: number
  subType: string
  alias: any[]
  description: string
  tags: string
  name: string
  id: number
  type: string
  size: number
  picId_str: string
  info: Info
}

export interface Info {
  commentThread: CommentThread
  latestLikedUsers?: any
  liked: boolean
  comments?: any
  resourceType: number
  resourceId: number
  commentCount: number
  likedCount: number
  shareCount: number
  threadId: string
}

export interface CommentThread {
  id: string
  resourceInfo: ResourceInfo
  resourceType: number
  commentCount: number
  likedCount: number
  shareCount: number
  hotCount: number
  latestLikedUsers?: any
  resourceTitle: string
  resourceOwnerId: number
  resourceId: number
}

export interface ResourceInfo {
  id: number
  userId: number
  name: string
  imgUrl: string
  creator?: any
  encodedId?: any
  subTitle?: any
  webUrl?: any
}

export interface AlbumArtist2 {
  img1v1Id: Pic
  topicPerson: number
  followed: boolean
  trans: string
  picId: Pic
  musicSize: number
  albumSize: number
  briefDesc: string
  picUrl: string
  img1v1Url: string
  alias: string[]
  name: string
  id: number
  picId_str: string
  img1v1Id_str: string
}

export interface AlbumArtist {
  img1v1Id: Pic
  topicPerson: number
  followed: boolean
  trans: string
  picId: number
  musicSize: number
  albumSize: number
  briefDesc: string
  picUrl: string
  img1v1Url: string
  alias: any[]
  name: string
  id: number
  img1v1Id_str: string
}

export interface AlbumSong {
  rtUrls: any[]
  ar: AlbumAr[]
  al: AlbumAl
  st: number
  noCopyrightRcmd?: any
  songJumpInfo?: any
  rtype: number
  rurl?: any
  pst: number
  alia: any[]
  pop: number
  rt: string
  mst: number
  cp: number
  crbt?: any
  cf: string
  dt: number
  h: H
  sq: H
  hr?: any
  l: H
  rtUrl?: any
  ftype: number
  no: number
  fee: number
  djId: number
  mv: number
  t: number
  v: number
  cd: string
  a?: any
  m: H
  name: string
  id: number
  privilege: AlbumPrivilege
}

export interface AlbumPrivilege {
  id: number
  fee: number
  payed: number
  st: number
  pl: number
  dl: number
  sp: number
  cp: number
  subp: number
  cs: boolean
  maxbr: number
  fl: number
  toast: boolean
  flag: number
  preSell: boolean
  playMaxbr: number
  downloadMaxbr: number
  maxBrLevel: string
  playMaxBrLevel: string
  downloadMaxBrLevel: string
  plLevel: string
  dlLevel: string
  flLevel: string
  rscl?: any
  freeTrialPrivilege: FreeTrialPrivilege
  chargeInfoList: ChargeInfoList[]
}

export interface AlbumAl {
  id: number
  name: string
  picUrl: string
  pic_str: string
  pic: Pic
}

export interface AlbumAr {
  id: number
  name: string
  alia: string[]
}
